package model

import (
	"context"
	"fmt"

	goservice "gitee.com/liumou_site/go-service"
)

// RestartSshdService 重启SSH服务，并确保服务成功重启。
// 该函数使用go-service库来管理sshd服务，重启服务并检查状态。
// 如果重启失败或服务状态异常，则返回错误信息。
// 返回值：
//   - error: 如果重启过程中出现错误，则返回错误信息；否则返回nil。
func (i Info) RestartSshdService() error {
	if i.Debug {
		GetLanguageManager().Debug("正在重启服务", "RestartSshdService")
	}
	if err := CheckSSHListening(i); err == nil {
		if i.Debug {
			GetLanguageManager().Debug("SSH 正在监听", "SSH is listening")
		}
		return nil
	}
	// 使用go-service库管理sshd服务
	service, err := goservice.NewService("sshd", "OpenSSH Service", "/usr/sbin/sshd")
	if err != nil {
		GetLanguageManager().Error("创建SSH服务失败: ", "Failed to create SSH service: ", err)
		return fmt.Errorf("创建SSH服务失败: %v", err)
	}

	// 重启SSH服务
	err = service.RestartService(context.Background())
	if err != nil {
		GetLanguageManager().Error("重启SSH服务失败: ", "Failed to restart SSH service: ", err)
		return fmt.Errorf("重启SSH服务失败: %v", err)
	}

	// 检查SSH服务状态
	status, err := service.GetServiceStatus(context.Background())
	if err != nil {
		GetLanguageManager().Error("SSH服务状态检查失败: ", "SSH service status check failed: ", err)
		return fmt.Errorf("SSH服务状态检查失败: %v", err)
	}

	// 检查服务是否正在运行
	if status == nil || !status.Running {
		GetLanguageManager().Error("SSH服务重启后状态异常", "SSH service status abnormal after restart")
		return fmt.Errorf("SSH服务重启后状态异常")
	}

	// 检查SSH监听状态
	if CheckSSHListening(i) != nil {
		GetLanguageManager().Error("SSH未在监听", "SSH is not listening")
		return fmt.Errorf("SSH is not listening")
	}

	GetLanguageManager().Info("SSH服务重启成功", "Restart SSH service successfully")
	return nil
}
